/**
 * 初始化package.json  npm init -y
 * 在script中添加命令 tsc：tsc
 * 初始化ts配置文件npm run tsc -- --init
 * 打开对默认any类型的报错的校验
 * 打开js的严格模式
 * **/

// ts
/**
 * ts: js的超集
 */

/**
 *  ts类型:
 *  string,
 *  boolean
 *  number
 *  any
 *  Array
 *  object
 *  void 无返回类型
 *  undefined
 *  null
 *  枚举:字符枚举 单纯的对象，数字枚举（反向映射）：可以通过value获取到key
 *  类型断言: 跳过ts的类型检测
 */

// 字符枚举
enum ItemEnum {
    name = '张三',
    age = '12',
    info = '我是张三'
}

// 数字 反向映射
enum NumEnum {
    name,
    age,
    info
}


interface ItemType {
    name: string,
    age: string,
    info?: boolean | string
}

 function filterArray (arr:Array<ItemType>, name:string):ItemType[]{
    const newArr = arr.filter(item => item.name === name)

    return  newArr
}

let str:any = true

const num:number = (str as string).length

// console.log(num)

// 后端返回的数据
const a:number[] = [1,2,3,4,5,6,7]


// 前端定义的枚举
enum DayEnum {
    "周一" = 1,
    "周二",
    "周三",
    "周四",
    "周五",
    "周六",
    "周日",
}

const newDay = a.map(item => {
    return {
        name: DayEnum[item]
    }
})

interface Item  {
    name: string,
    index?: number
}

function mapArr (arr:Item[], num: number):Item[] {
    return arr.map((item, index) => {
        return {
            ...item,
            index: num + index
        }
    })
}

const arr:{name: string}[] = [
    {
        name: '张三'
    },
    {
        name: '李四'
    }
]

mapArr(arr, 20)


// console.log(filterArray([{name: ItemEnum["name"], age: '12', info: true}, {name: '李四', age: '12', info: '我是李四'}], '张三'))
